#include <stdio.h>
#include <string.h>

int countPrimes(int n) { 
    
    // 使用埃筛法统计小于n的质数数目

    // 由于最小的质数是2，因此当N小于2时是没有质数的
    if (n < 2) {
        return 0;
    }

    int isPrime[n];
    memset(isPrime, 0, sizeof(isPrime)); //内存初始化
    // 上述用法的目的是：将isPrime指针所指的内存地址为起始端，往后的sizeof(isPrime) 个字节的内存都设置为0
    // 简单来说就是初始化数组为0

    int ans = 0;
    for (int i = 2; i < n; ++i) {
        if (!isPrime[i]) {
            ans += 1;
            if ((long long)i * i < n) {
                for (int j = i * i; j < n; j += i) {
                    isPrime[j] = 1;
                }
            }
        }
    }
    return ans;
}

int main(){
  
  int N=1;
  int Num;

  scanf("%d",&N); 
  
  Num = countPrimes(N); 
  
  printf("%d",Num);

  return 0;
}